package com.bestcem.xm.common.core.config.delaymq.dao;


import com.bestcem.xm.common.core.config.delaymq.entity.MqSendLogDO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * mq消息发送记录表dao
 *
 * @author sh.pei <sh.pei@idiaoyan.com>
 * @version v1.0
 * @date 2021/8/6 11:02
 */
public interface MqSendLogDao {

    /**
     * 保存mq消息发送记录
     *
     * @param awardMqSendLogDO mq消息发送记录
     * @return 主键id
     */
    String insert(MqSendLogDO awardMqSendLogDO);

    /**
     * 查找mq消息
     *
     * @param status         状态
     * @param startDelayTime 查找的开始delayTime
     * @param endDelayTime   查找的结束delayTime
     * @param maxCount       单次查询最大数量
     * @return mq消息列表
     */
    List<MqSendLogDO> listAwardMqSendLogs(Integer status, Date startDelayTime, Date endDelayTime, int maxCount);

    /**
     * 根据id更新状态
     *
     * @param id     日志记录id
     * @param status 更新后的状态
     * @return 更新成功条数
     */
    Integer updateStatusById(String id, Integer status);

    /**
     * 根据id列表修改 次数 和状态
     *
     * @param ids         id列表
     * @param countModify 次数修改
     * @param newStatus   修改后状态
     * @param updateTime  修改时间
     * @return 更新结果
     */
    Integer batchUpdateStatus(List<String> ids, int countModify, int newStatus, @Param("updateTime") Date updateTime);

    /**
     * 根据id列表查询mq消息
     *
     * @param ids id列表
     * @return
     */
    List<MqSendLogDO> listByIds(List<String> ids);

    /**
     * 删除创建时间在 dateTime 之前 创建,且状态为statuses 的消息
     *
     * @param statuses 状态
     * @param dateTime 时间
     * @return
     */
    int deleteMqSendLogs(List<Integer> statuses, Date dateTime);

}
